note
	description: "Summary description for {MC72}."
	author: "Durand Alejandro - Santos Rodrigo"
	date: "$Date$"
	revision: "$Revision$"

class
	MC72
	--Controlador cibernetico que manipula los misiles almacenados en el avion MIRAGE al cual
	--complementa.Es el encargado de su lanzamiento.

    create
       --Constructores
       make

    feature{NONE}--Atributos privados

	   misilActual : MISIL
	        --Misil actual

	feature{MIRAGE}--Metodos solo accedidos por la clase MIRAGE

	   make
      		--contructor de la clase
      		do
      			misilActual := void
     		end

      Hay_Misiles : BOOLEAN
	   		-- Retorna verdadero si tiene misiles en stock.

	   local
	   	r : RANDOM
	    t : DATE_TIME

	     	do
			create r.make
		    create t.make_now

			r.set_seed (t.seconds)
			if((r.next_random (t.seconds) \\ 3) = 0 )
			 then
			 	--No hay misiles
			    Result := FALSE
			    else
			    	Result := TRUE
			    end
		 end

	   Setup_Misil
	   		require
	   			Hay_Misiles
	   		do
	   			create misilActual.make
	   			io.putstring ("-- MC72 :: Setup_Misil :: Misil creado")
	   			io.new_line
	   		end

	   Cargar_Misil
       	   --Carga el misil para su lanzamiento.Falla si activar falla.
       	do
       		io.putstring ("-- MC72 :: Cargar_Misil :: Cargando misil")
       		io.new_line
       		misilActual.activar--Se busca activar el misil.
       		io.putstring ("-- MC72 :: Cargar_Misil :: Misil activado")
       		io.new_line
       	   --se ejecuta el rescue si la activacion del misil falla.	
       	rescue
             io.putstring("-- MC72 :: Cargar_Misil :: Fallo la carga del misil")
             io.new_line
       	end

       Preparar_Misil
       		local
       			flag : INTEGER
       		do
       			io.putstring ("- MC72 :: Preparar_Misil :: Preparando misil.")
       			io.new_line
       			flag := 0
				Setup_Misil
				flag := 1
				Cargar_Misil
				io.putstring("- MC72 :: Preparar_Misil :: Preparacion completa")
				io.new_line
       		rescue
       			if(flag = 0) then
       				io.putstring ("- MC72 :: Preparar_Misil :: No hay misiles disponibles")
	   				io.new_line
	   			end
       			if(flag = 1) then
       				retry
       			end
       			io.putstring("- MC72 :: Preparar_Misil :: Preparacion incompleta")
       			io.new_line
       		end

       	Apuntar_Misil(objetivo : STRING)
       	  --Indica al misil el objetivo a atacar.
       	  do
       	  		io.putstring ("- MC72 :: Apuntar_Misil :: Apuntando")
       	  		io.new_line
       	  		misilActual.Fijar_Blanco(objetivo)--Se intenta fijar el blanco
       	  		io.putstring ("- MC72 :: Apuntar_Misil :: Finalizo apuntado")
       	  		io.new_line
       	   		--Se ejecuta el rescue si la operacion del misil falla.
       	  rescue
				io.putstring ("- MC72 :: Apuntar_Misil :: No se pudo fijar el blanco")
				io.new_line
       	  end


       Lanzar_Misil
         --Lanza el misil hacia el objetivo determinado.
         do
         	misilActual.despegar--Se intenta el despegue del misil
         	io.putstring ("- MC72 :: Lanzar_Misil :: Lanzamiento exitoso")
         	io.new_line
          --se ejecuta el rescue cuando la operacion del misil falla.
         rescue
         	io.putstring("- MC72 :: Lanzar_Misil :: El lanzamiento fallo")
         	io.new_line
         end

end
